Memleak还可以作为通用堆分析器使用。在 Type面板中会显示出堆中的类之间的引用关系。在下面的示例中,实例之间出现了循环引用,Hashtable$Entry实例指向了自身,右键单击引用关系上的数字,选择 List referring instances菜单即可显示出关联关系。

经过几次点击后,就可以超出系统中到底有哪些Hashtable实例指向了自身,还可以找出他们在系统的准确位置。选择某个实例,将其添加到 Instance Graph,并追踪器其引用路径,于是可以发现在com.sun.jmx.mbeanserver.RepositorySupport类中用到了该实例。当然,将Hashtable指向Hashtable并没有错,这里只是作为示例讲解一下而已。
上面的示例需要使用JDK 1.5才能看到,到JDK 1.6时,就已经改掉了这种设计。
使用Memleak可以审查系统中的任何实例,接下来会审查com.sun.jmx.mbeanserver.RepositorySupport类,看一下它是否真的需要使用Hashtable实例。
